今天來簡介 DASH 直播協議。
DASH 全名 Dynamic Adaptive Streaming over HTTP ,它是由 MPEG 開發的直播協議,因此 DASH 又稱為 MPEG-DASH。
如果說 HLS 是蘋果為了反對 Flash 與 RTMP 衍生的直播協議,那 DASH 的出現就是為了與蘋果的 HLS 分庭抗禮, HLS 並非國際標準直播協議,只因為科技公司領導者:蘋果大推而成為主流 ( 雖然 HLS 確實有可取之處 )。相較 HLS 受制於蘋果私有, DASH 的修改比較嚴謹標準一點,因為它是真正的 國際規範標準 ,畢竟 MPEG 所屬的組織是 ISO(國際標準組織)。
DASH 對影像的編碼限制不大,可使用大部分如 H.264、VP9 ...編碼影片,既然 DASH 是由 MPEG 研發的傳輸協議,最常被拿來傳輸的影片格式自然是 MP4 ( H.264 )。一個 DASH 的影片連結是這樣的:
https://s3.amazonaws.com/_bc_dml/example-content/sintel_dash/sintel_vod.mpd
我們可以藉由Native MPEG-Dash + HLS Playback來播放這個影片。
DASH 的原理與 HLS 類似,是將影片拆分成一個一個的小片段傳輸到前端播放,mpd 與 m3u8 一樣,播放器其實是藉此向後端索取一個一個的影片,並且依據 mpd 的設定,可以依照頻寬或使用者選擇,切換不同畫質影片。
雖然概念類似,但 DASH 小勝 HLS 的其中一點是,它的延遲性比 HLS 還少一點。
如同 m3u8 檔案,我們一樣可以將 mpd 下載下來,這次我以 Postman 為例,用 GET 試試:
可以看到 mpd 內容其實類似 XML,記錄了一些影片資訊,包含影片寬高、影片類型等等。
最後要注意的是,DASH 在瀏覽器的支援度不佳,比 HLS 還糟糕,如果我們沒有引入任何 Library 的話...
只有 Edge 能原生支援 DASH,慶幸的是前端現在可以透過 dash.js 幫助播放 DASH 影片。
參考
WIKI
MPEG 官方網站